//package com.example.sxmall.controller.qiantai;
//
//import com.example.sxmall.config.AlipayConfig;
//import com.example.sxmall.service.OrderService;
//import com.example.sxmall.util.PageQueryUtil;
//import com.example.sxmall.vo.OrderDetailVO;
////import com.example.sxmall.vo.UserVo;
//import org.apache.commons.lang3.StringUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.util.CollectionUtils;
//import org.springframework.web.bind.annotation.*;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpSession;
//import java.io.UnsupportedEncodingException;
//import java.util.List;
//import java.util.Map;
//import java.util.Random;
//
///**
// * Created with IntelliJ IDEA.
// *
// * @Author: 潘天宇
// * @Date: 2022/03/22/9:55
// * @Description:前台接口
// */
//public class OrderController {
//    private static Logger log = LoggerFactory.getLogger(OrderController.class);
//
////    @Autowired
////    private ShoppingCartService shoppingCartService;
//    @Autowired
//    private OrderService orderService;
////    @Autowired
////    private MallUserMapper mallUserMapper;
//    @Autowired
//    private AlipayConfig alipayConfig;
//
//    @GetMapping("/orders/{orderNo}")
//    public String orderDetailPage(HttpServletRequest request, @PathVariable("orderNo") String orderNo, HttpSession httpSession) {
//        UserVo user = (UserVo) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
//        OrderDetailVO orderDetailVO = orderService.getOrderDetailByOrderNo(orderNo, user.getUserId());
//        if (orderDetailVO == null) {
//            return "error/error_5xx";
//        }
//        request.setAttribute("orderDetailVO", orderDetailVO);
//        return "mall/order-detail";
//    }
//
//    @GetMapping("/orders")
//    public String orderListPage(@RequestParam Map<String, Object> params, HttpServletRequest request, HttpSession httpSession) {
//        UserVo user = (UserVo) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
//        params.put("userId", user.getUserId());
//        if (StringUtils.isEmpty((CharSequence) params.get("page"))) {
//            params.put("page", 1);
//        }
//        params.put("limit", Constants.ORDER_SEARCH_PAGE_LIMIT);
//        //封装我的订单数据
//        PageQueryUtil pageUtil = new PageQueryUtil(params);
//        request.setAttribute("orderPageResult", orderService.getMyOrders(pageUtil));
//        request.setAttribute("path", "orders");
//        return "mall/my-orders";
//    }
//
//    @RepeatSubmit
//    @GetMapping("/saveOrder")
//    public String saveOrder(Long couponUserId, HttpSession httpSession) {
//        UserVo user = (UserVo) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
//        List<ShoppingCartItemVO> myShoppingCartItems = shoppingCartService.getMyShoppingCartItems(user.getUserId());
//        if (StringUtils.isEmpty(user.getAddress().trim())) {
//            //无收货地址
//            SxMallException.fail(ServiceResultEnum.NULL_ADDRESS_ERROR.getResult());
//        }
//        if (CollectionUtils.isEmpty(myShoppingCartItems)) {
//            //购物车中无数据则跳转至错误页
//            SxMallException.fail(ServiceResultEnum.SHOPPING_ITEM_ERROR.getResult());
//        }
//        //保存订单并返回订单号
//        String saveOrderResult = orderService.saveOrder(user, couponUserId, myShoppingCartItems);
//        //跳转到订单详情页
//        return "redirect:/orders/" + saveOrderResult;
//    }
//
//    @RepeatSubmit
//    @GetMapping("/saveSeckillOrder/{seckillSuccessId}/{userId}/{seckillSecretKey}")
//    public String saveOrder(@PathVariable Long seckillSuccessId,
//                            @PathVariable Long userId,
//                            @PathVariable String seckillSecretKey) {
//        if (seckillSecretKey == null || !seckillSecretKey.equals(MD5Util.MD5Encode(seckillSuccessId + Constants.SECKILL_ORDER_SALT, Constants.UTF_ENCODING))) {
//            throw new SxMallException("秒杀商品下单不合法");
//        }
//        // 保存订单并返回订单号
//        String saveOrderResult = orderService.seckillSaveOrder(seckillSuccessId, userId);
//        // 跳转到订单详情页
//        return "redirect:/orders/" + saveOrderResult;
//    }
//
//    @RepeatSubmit
//    @GetMapping("/selectPayType")
//    public String selectPayType(HttpServletRequest request, @RequestParam("orderNo") String orderNo, HttpSession httpSession) {
//        UserVo user = (UserVo) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
//        Order order = judgeOrderUserId(orderNo, user.getUserId());
//        //判断订单状态
//        if (order.getOrderStatus().intValue() != OrderStatusEnum.ORDER_PRE_PAY.getOrderStatus()) {
//            SxMallException.fail(ServiceResultEnum.ORDER_STATUS_ERROR.getResult());
//        }
//        request.setAttribute("orderNo", orderNo);
//        request.setAttribute("totalPrice", order.getTotalPrice());
//        return "mall/pay-select";
//    }
//
//    @RepeatSubmit
//    @GetMapping("/payPage")
//    public String payOrder(HttpServletRequest request, @RequestParam("orderNo") String orderNo, HttpSession httpSession, @RequestParam("payType") int payType) throws UnsupportedEncodingException {
//        UserVo mallUserVO = (UserVo) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
//        Long userId = mallUserVO.getUserId();
//        Order order = judgeOrderUserId(orderNo, userId);
//        // 判断订单userId
//        if (!userId.equals(order.getUserId())) {
//            SxMallException.fail(ServiceResultEnum.NO_PERMISSION_ERROR.getResult());
//        }
//        // 判断订单状态
//        if (order.getOrderStatus() != OrderStatusEnum.ORDER_PRE_PAY.getOrderStatus()
//                || order.getPayStatus() != PayStatusEnum.PAY_ING.getPayStatus()) {
//            throw new SxMallException("订单结算异常");
//        }
//        request.setAttribute("orderNo", orderNo);
//        request.setAttribute("totalPrice", order.getTotalPrice());
//        if (payType == 1) {
//            request.setCharacterEncoding(Constants.UTF_ENCODING);
//            // 初始化
//            AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.getGateway(), alipayConfig.getAppId(),
//                    alipayConfig.getRsaPrivateKey(), alipayConfig.getFormat(), alipayConfig.getCharset(), alipayConfig.getAlipayPublicKey(),
//                    alipayConfig.getSigntype());
//            // 创建API对应的request
//            AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
//            // 在公共参数中设置回跳和通知地址,通知地址需要公网可访问
//            String url = ProjectConfig.getServerUrl() + request.getContextPath();
//            alipayRequest.setReturnUrl(url + "/returnOrders/" + order.getOrderNo() + "/" + userId);
//            alipayRequest.setNotifyUrl(url + "/paySuccess?payType=1&orderNo=" + order.getOrderNo());
//
//            // 填充业务参数
//
//            // 必填
//            // 商户订单号，需保证在商户端不重复
//            String out_trade_no = order.getOrderNo() + new Random().nextInt(9999);
//            // 销售产品码，与支付宝签约的产品码名称。目前仅支持FAST_INSTANT_TRADE_PAY
//            String product_code = "FAST_INSTANT_TRADE_PAY";
//            // 订单总金额，单位为元，精确到小数点后两位，取值范围[0.01,100000000]。
//            String total_amount = order.getTotalPrice() + "";
//            // 订单标题
//            String subject = "支付宝测试";
//
//            // 选填
//            // 商品描述，可空
//            String body = "商品描述";
//
//            alipayRequest.setBizContent("{" + "\"out_trade_no\":\"" + out_trade_no + "\"," + "\"product_code\":\""
//                    + product_code + "\"," + "\"total_amount\":\"" + total_amount + "\"," + "\"subject\":\"" + subject
//                    + "\"," + "\"body\":\"" + body + "\"}");
//            // 请求
//            String form;
//            try {
//                // 需要自行申请支付宝的沙箱账号、申请appID，并在配置文件中依次配置AppID、密钥、公钥，否则这里会报错。
//                form = alipayClient.pageExecute(alipayRequest).getBody();//调用SDK生成表单
//                request.setAttribute("form", form);
//            } catch (AlipayApiException e) {
//                e.printStackTrace();
//            }
//            return "mall/alipay";
//        } else {
//            return "mall/wxpay";
//        }
//    }
//
//    @GetMapping("/returnOrders/{orderNo}/{userId}")
//    public String returnOrderDetailPage(HttpServletRequest request, @PathVariable String orderNo, @PathVariable Long userId) {
//        log.info("支付宝return通知数据记录：orderNo: {}, 当前登陆用户：{}", orderNo, userId);
//        // Order order = judgeOrderUserId(orderNo, userId);
//        // 将notifyUrl中逻辑放到此处：未支付订单更新订单状态
//        // if (order.getOrderStatus() != OrderStatusEnum.ORDER_PRE_PAY.getOrderStatus()
//        //         || order.getPayStatus() != PayStatusEnum.PAY_ING.getPayStatus()) {
//        //     throw new SxMallException("订单关闭异常");
//        // }
//        // order.setOrderStatus((byte) OrderStatusEnum.ORDER_PAID.getOrderStatus());
//        // order.setPayType((byte) 1);
//        // order.setPayStatus((byte) PayStatusEnum.PAY_SUCCESS.getPayStatus());
//        // order.setPayTime(new Date());
//        // order.setUpdateTime(new Date());
//        // if (!orderService.updateByPrimaryKeySelective(order)) {
//        //     return "error/error_5xx";
//        // }
//        OrderDetailVO orderDetailVO = orderService.getOrderDetailByOrderNo(orderNo, userId);
//        if (orderDetailVO == null) {
//            return "error/error_5xx";
//        }
//        request.setAttribute("orderDetailVO", orderDetailVO);
//        return "mall/order-detail";
//    }
//
//    @PostMapping("/paySuccess")
//    @ResponseBody
//    public Result paySuccess(Integer payType, String orderNo) {
//        log.info("支付宝paySuccess通知数据记录：orderNo: {}, payType：{}", orderNo, payType);
//        String payResult = orderService.paySuccess(orderNo, payType);
//        if (ServiceResultEnum.SUCCESS.getResult().equals(payResult)) {
//            return ResultGenerator.genSuccessResult();
//        } else {
//            return ResultGenerator.genFailResult(payResult);
//        }
//    }
//
//    @RepeatSubmit
//    @PutMapping("/orders/{orderNo}/cancel")
//    @ResponseBody
//    public Result cancelOrder(@PathVariable("orderNo") String orderNo, HttpSession httpSession) {
//        UserVo user = (UserVo) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
//        String cancelOrderResult = orderService.cancelOrder(orderNo, user.getUserId());
//        if (ServiceResultEnum.SUCCESS.getResult().equals(cancelOrderResult)) {
//            return ResultGenerator.genSuccessResult();
//        } else {
//            return ResultGenerator.genFailResult(cancelOrderResult);
//        }
//    }
//
//    @RepeatSubmit
//    @PutMapping("/orders/{orderNo}/finish")
//    @ResponseBody
//    public Result finishOrder(@PathVariable("orderNo") String orderNo, HttpSession httpSession) {
//        UserVo user = (UserVo) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
//        String finishOrderResult = orderService.finishOrder(orderNo, user.getUserId());
//        if (ServiceResultEnum.SUCCESS.getResult().equals(finishOrderResult)) {
//            return ResultGenerator.genSuccessResult();
//        } else {
//            return ResultGenerator.genFailResult(finishOrderResult);
//        }
//    }
//
//    /**
//     * 判断订单关联用户id和当前登陆用户是否一致
//     *
//     * @param orderNo 订单编号
//     * @param userId  用户ID
//     * @return 验证成功后返回订单对象
//     */
//    private Order judgeOrderUserId(String orderNo, Long userId) {
//        Order order = orderService.getOrderByOrderNo(orderNo);
//        // 判断订单userId
//        if (order == null || !order.getUserId().equals(userId)) {
//            throw new SxMallException("当前订单用户异常");
//        }
//        return order;
//    }
//}
